import {genComponentRegisterObjByList} from "@/utils/gen-component-register-obj";
import EyeOutline from "@/components/st-icon/svg/EyeOutline.vue";
import EyeClosedOutline from "@/components/st-icon/svg/EyeClosedOutline.vue";
import User from '@/components/st-icon/svg/User.vue'
import Lock from '@/components/st-icon/svg/Lock.vue'
import Clear from "@/components/st-icon/svg/Clear.vue";

// 由所有 svg 图标组件组成的数组
const svgIconList = [
    EyeOutline,
    EyeClosedOutline,
    User,
    Lock,
    Clear,
]
// 默认导出由所有 svg 图标组件组成的数组
export default svgIconList

/**
 * 根据由所有 svg 图标组件名称组成的数组生成并导出
 * 取值只能为组件名称的联合数据类型声明
 */
// 动态生成由所有 svg 图标组件名称组成的数组无法转化为元组
// const svgIconNameList = svgIconList.map(item => item.name)
// 由所有 svg 图标组件名称组成的数组
// 并将其转化为元组
const svgIconNameTuple = [
    'EyeOutline',
    'EyeClosedOutline',
    'User',
    'Lock',
    'Clear',
] as const
// 将元组转化为联合数据类型
// 由于元组的类型为 'EyeOutline'[]，所以 typeof svgIconNameTuple
// 可以理解为由转化为元组前的数组值作为类型，由类型组成的一个数组
// [number] 取出类型
export type SvgIconName = (typeof svgIconNameTuple)[number]

// 导出用于在父组件中进行所有 svg 图标组件注册的对象
export const componentsRegister = genComponentRegisterObjByList(svgIconList)